通过IDE使用阿里云PHP SDK

更新时间:

本文以在Windows操作系统上,通过VS Code使用阿里云PHP SDK为例,帮助您了解如何快速使用阿里云PHP SDK。

前提条件

使用SDK

使用OpenAPI门户提供的代码示例工程

说明

可能会存在OpenAPI无法下载代码示例工程的情况,您可以查看在已有项目中使用阿里云PHP SDK的介绍。

  1. 搜索OpenAPI:在OpenAPI门户搜索您将要调用的接口。例如调用云服务器ECS的DescribeRegions接口,可在搜索栏中填入DescribeRegions,在搜索结果中单击API名称进入API调试页面。

    1716346246233_4A41CC11-FA46-4973-BC7B-C4AAD6E7F3F0

  2. 查看OpenAPI参数信息:在参数配置页签中填写需要的参数信息。填写时请参考右侧文档页签,充分了解接口的说明和注意事项(尤其是费用相关信息),以及各个参数的具体含义和使用方法。

    1716346635851_0B018C7F-D759-497b-B529-58E23E4AC41B

  3. 下载示例工程:在右侧的SDK示例页签,下载SDK完整工程至本地并解压。

    image

  4. 安装示例工程所需依赖:使用VS Code打开解压后的示例工程,在Terminal中执行composer install命令。

    如果在执行composer install命令时,出现以下报错。

    Your requirements could not be resolved to an installable set of packages.
    
      Problem 1
        - Root composer.json requires alibabacloud/ecs-20140526 ^4.1.6 -> satisfiable by alibabacloud/ecs-20140526[4.1.6].
        - alibabacloud/ecs-20140526 4.1.6 requires alibabacloud/tea-utils ^0.2.20 -> found alibabacloud/tea-utils[dev-master, 0.1.0, ..., 0.2.19] but it does not match the constraint.

    您可以在composer.json文件中,修改alibabacloud/ecs-20140526的依赖版本解决。

    "alibabacloud/ecs-20140526": "^4.1",
  5. 运行示例代码:在Terminal中执行php src/Sample.php命令。如果返回结果中出现"statusCode":200,则表示调用成功。

    image

在已有项目中使用阿里云PHP SDK

  1. 获取SDK:访问SDK中心,选择您想要使用的SDK的云产品,这里以云服务器ECS为例。SDK版本选择V2.0,语言选择PHP

    image

  2. 打开VS Code,在VS Code菜单栏,单击File->Open Folder,新建一个项目文件夹或者选择一个已有的项目文件夹。例如文件夹名称为phpprojects,然后选择该文件夹。

  3. 安装SDK:复制SDK安装方式,在Terminal中执行。

  4. 创建PHP文件:右键点击文件资源管理器空白处,选择New File...,命名为demo.php。

  5. 初始化客户端:调用阿里云OpenAPI需要先初始化客户端,以初始化ECS客户端为例。

    重要
    1. 初始化客户端时需要使用AccessKey完成身份验证,请提前获取AccessKey。获取方法请参见创建AccessKey

    2. 获取RAM用户的AccessKey之后,还需要在环境变量中设置AccessKey,具体操作步骤请参见在Linux、macOS和Windows系统配置环境变量

    3. endpoint如何设置请参见服务接入点

    <?php
    use AlibabaCloud\Credentials\Credential\Config;
    use AlibabaCloud\SDK\Ecs\V20140526\Ecs;
    
    
    class Sample
    {
        /**
         * 创建一个ECS客户端实例
         * 该方法用于初始化并返回一个ECS客户端对象,该对象可用于执行ECS相关操作。
         * 它通过读取环境变量中的访问密钥ID和访问密钥秘密来配置客户端,确保了敏感信息的安全存储和访问。
         * 
         * @return Ecs 返回一个配置好的ECS客户端实例
         */
        public static function createClient()
        {
            // 创建配置对象
            $config = new Config([
                "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), // 获取环境变量中的RAM用户的Accesskey ID
                "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), // 获取环境变量中的RAM用户的Accesskey Secret
                "endpoint" => "ecs.cn-hangzhou.aliyuncs.com" // 设置ECS服务的接入点
            ]);
    
            // 使用上述配置创建一个新的Ecs客户端实例
            return new Ecs($config);
        }
    }
  6. 调用API。在调用OpenAPI之前,您需要先了解OpenAPI的详细信息,请查看API文档,以调用ECS的DescribeRegions为例。

    说明

    每个API都有独立的请求对象,命名规则为${API名称}${Request},例如DescribeRegionsRequest。

    <?php
    
    require_once 'vendor/autoload.php';
    
    use AlibabaCloud\SDK\Ecs\V20140526\Ecs;
    use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
    use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
    use Darabonba\OpenApi\Models\Config;
    
    
    class Sample
    {
        /**
         * 创建一个ECS客户端实例
         * 该方法用于初始化并返回一个ECS客户端对象,该对象可用于执行ECS相关操作。
         * 它通过读取环境变量中的访问密钥ID和访问密钥秘密来配置客户端,确保了敏感信息的安全存储和访问。
         * 
         * @return Ecs 返回一个配置好的ECS客户端实例
         */
        public static function createClient()
        {
            // 创建配置对象
            $config = new Config([
                "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), // 获取环境变量中的RAM用户的Accesskey ID
                "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), // 获取环境变量中的RAM用户的Accesskey Secret
                "endpoint" => "ecs.cn-hangzhou.aliyuncs.com" // 设置ECS服务的接入点
            ]);
    
            // 使用上述配置创建一个新的Ecs客户端实例
            return new Ecs($config);
        }
        /**
         * 
         * 本函数旨在展示如何使用SDK客户端调用DescribeRegions接口。
         * 它创建一个客户端实例,构造请求对象,并尝试调用接口。
         * 如果调用失败,将捕获异常并输出错误信息。
         */
        public static function main()
        {
            // 创建SDK客户端实例
            $client = self::createClient();
            // 创建DescribeRegionsRequest请求对象,不传入任何参数
            $describeRegionsRequest = new DescribeRegionsRequest([]);
            // 创建RuntimeOptions实例,不传入任何参数
            $runtime = new RuntimeOptions([]);
            try {
                // 使用客户端的describeRegionsWithOptions方法调用接口
                // 这里使用了try-catch结构来捕获可能的异常
                $result = $client->describeRegionsWithOptions($describeRegionsRequest, $runtime);
                print_r($result);
            } catch (Exception $error) {
                // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
                var_dump($error->message);
            }
        }
    }
    
    Sample::main();
  7. 异常处理:请重视异常处理,切勿在项目中直接忽略异常。建议采取合理的措施来处理异常,比如合理地传播异常、记录日志、尝试恢复等,以确保系统的健壮性和稳定性。PHP SDK异常处理介绍请参见异常处理

    <?php
    
    require_once 'vendor/autoload.php';
    
    use AlibabaCloud\SDK\Ecs\V20140526\Ecs;
    use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeRegionsRequest;
    use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
    use Darabonba\OpenApi\Models\Config;
    
    
    class Sample
    {
        /**
         * 创建一个ECS客户端实例
         * 该方法用于初始化并返回一个ECS客户端对象,该对象可用于执行ECS相关操作。
         * 它通过读取环境变量中的访问密钥ID和访问密钥秘密来配置客户端,确保了敏感信息的安全存储和访问。
         * 
         * @return Ecs 返回一个配置好的ECS客户端实例
         */
        public static function createClient()
        {
            // 创建配置对象
            $config = new Config([
                "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), // 获取环境变量中的RAM用户的Accesskey ID
                "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), // 获取环境变量中的RAM用户的Accesskey Secret
                "endpoint" => "ecs.cn-hangzhou.aliyuncs.com" // 设置ECS服务的接入点
            ]);
    
            // 使用上述配置创建一个新的Ecs客户端实例
            return new Ecs($config);
        }
        /**
         * 
         * 本函数旨在展示如何使用SDK客户端调用DescribeRegions接口。
         * 它创建一个客户端实例,构造请求对象,并尝试调用接口。
         * 如果调用失败,将捕获异常并输出错误信息。
         */
        public static function main()
        {
            // 创建SDK客户端实例
            $client = self::createClient();
            // 创建DescribeRegionsRequest请求对象,不传入任何参数
            $describeRegionsRequest = new DescribeRegionsRequest([]);
            // 创建RuntimeOptions实例,不传入任何参数
            $runtime = new RuntimeOptions([]);
            try {
                // 使用客户端的describeRegionsWithOptions方法调用接口
                // 这里使用了try-catch结构来捕获可能的异常
                $result = $client->describeRegionsWithOptions($describeRegionsRequest, $runtime);
                print_r($result);
            } catch (Exception $error) {
                if ($error instanceof TeaError) {
                    // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
                    print_r("message:" . $error->getMessage() . "\n");
                    print_r("code:" . $error->getCode() . "\n");
                    print_r($error->data);
                } elseif ($error instanceof TeaUnableRetryError) {
                    // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
                    print_r($error->getLastException());
                } else {
                    // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
                    print_r("message:" . $error->getMessage());
                }
            }
        }
    }
    
    Sample::main();

常见问题

  • 在调用OpenAPI时提示“cURL error 60: SSL certificate problem: unable to get local issuer certificate”。

    • 您需要下载一个受信任的CA证书,例如Mozilla的CA证书库

    • 配置PHP的SSL证书路径。在php.ini文件中搜索curl.cainfo,将值设置为CA证书的绝对路径,然后去掉前面配置项前的;

    • 重启PHP服务。

相关文档

进阶文档